{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# 时空预测模型演示\n",
    "\n",
    "本案例以交通流量预测问题为例，演示图网络时空预测模型DCRNN在时空预测问题上的应用。案例大致分为以下几个部分：\n",
    "- 案例简介\n",
    "- 方法简介\n",
    "- 数据准备\n",
    "- 模型训练\n",
    "- 模型预测"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 案例简介\n",
    "### 背景介绍\n",
    "**时空数据分析与预测**一直是地理信息科学的核心问题之一。随着空间数据观测，GIS，大数据和AI等技术的多年发展，时空数据已形成大量积累，时空数据分析实践呈现快速增长(王劲峰 等, 2014)。\n",
    "\n",
    "目前基于AI的时空预测技术已经广泛应用于智能交通、气象、农业等地学相关领域。\n",
    "\n",
    "其中，智能交通方面的交通流量时空预测就是一个典型的热门应用方向。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "\n",
    "\n",
    "随着城市化、交通状况等问题的日益复杂化，多数城市开始面临交通拥堵，交通状况难协调等问题，严重的浪费了时间，金钱和能源。\n",
    "\n",
    "<center><img src=\"images/traffice.png\" alt=\"Drawing\" style=\"width: 800px;\" align=\"center\"/></center>\n",
    "\n",
    "> 中科院可持续发展战略研究成果表明，包括北京、上海等大城市在内的全国 15 个大城市因发生交通拥堵每天相关的处理费用达 10 亿人民币。根据中国交通部的数据，交通拥堵带来的经济损失占城市人口可支配收入的 20%，相当于每年GDP损失 5-8%，达 2500 亿元人民币。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "在*城市规划、智慧城市建设*等项目的决策中，需要能合理的定量分析相关区域交通状况。\n",
    "\n",
    "**准确有效的交通时空预测**，能够为相关规划和决策提供科学决策的数据依据，也是目前*智慧城市*和*智慧交通建设*的**基础能力**之一。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "### 问题介绍\n",
    "本案例要解决的具体问题就是，如何根据道路传感器记录的该位置通行车辆速度历史信息和路网结构信息，预测该位置未来通行车辆的速度。\n",
    "- 输入的静态信息：交通路网结构\n",
    "- 输入的动态信息：历史车速\n",
    "- 输出的动态结果：未来时刻的车速\n",
    "\n",
    "<center><img src=\"images/s.png\" alt=\"Drawing\" style=\"width: 1000px;\" align=\"center\"/></center>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "### 问题的挑战性\n",
    "- 道路网络的复杂空间依赖性\n",
    "- 随道路状况变化的非线性时间动态\n",
    "- 长期预测的固有困难\n",
    "\n",
    "<center><img src=\"https://pic4.zhimg.com/v2-dbe2bded82cd64db2467777bc46a14f9_1200x500.jpg\" alt=\"Drawing\" style=\"width: 900px;\" /></center>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 方法简介\n",
    "### 时空深度学习\n",
    "经典的深度学习主要用卷积神经网络（CNN）对图片等空间上规则的格网数据进行建模，并在计算机视觉等领域取得巨大成功。在以往的时空预测研究中，郑宇团队(Zhang J. et al ,2016, 2017)较早提出时空深度学习的思想，通过借鉴计算机视觉，来对交通流量等时空问题进行建模，是将深度学习应用到时空预测的重要里程碑。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "这种方法的思想是将交通流量等空间矢量信息进行地理格网上的统计（栅格化），近似形成类似图片的规则格网结构（**结构上的单元之间为欧氏距离**），并将这些数据的格网作为序列上的一帧，再套用经典的CNN+RNN架构的模型进行模拟预测。\n",
    "\n",
    "<center><img src=\"http://img.mp.itc.cn/upload/20170216/04e00228714441dfa5d0ab7115ada4b8_th.jpeg\" alt=\"Drawing\" style=\"width: 900px;\"/></center>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "在每个时刻上，CNN模型通过卷积来建模格网中的局部空间自相关性，越近的格子之间越相关，这本质与地理学第一定律是相同思想。\n",
    "<center><img src=\"images/grid.png\" alt=\"Drawing\" style=\"width: 350px;\"/></center>\n",
    "\n",
    "\n",
    "虽然基于CNN+LSTM的时空深度学习取得了重大进展，但在以下方面还有需要解决的问题：\n",
    "- 所有的数据必须格网化才能计算，格网的分辨率限制了模拟的精度。\n",
    "- 实际关系并不只存在欧式距离，即关系并非与格点位置间的直接距离相关。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "为了解决这一问题，学者们发明了一种基于图结构的神经网络，通过将现实中一些复杂的非欧式问题抽象为图结构，得到比以往CNN模型更佳的效果(Cai H. et al ,2018 )。目前，在深度学习和时空预测中，图神经网络已经越来越成为主流的研发方法。在本案例中，两个相邻交通传感器之间的距离应为交通路网距离，而不是两点直线距离。交通路网结构本身就可以通过抽象为图结构，并在图上建模，来模拟路网交通的复杂时空规律\n",
    "\n",
    "<center><img src=\"images/graph.png\" alt=\"Drawing\" style=\"width: 10000px;\" /></center>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### DCRNN\n",
    "本案例采用一种基于图神经网络的交通流量时空预测模型 ——扩散卷积递归神经网络 DCRNN(Li Y et al  2018)，其基本思想是：\n",
    "- 将交通的路网网络建模为图结构，路网上传感器矢量点数据视为图上的信号，以此模拟空间相关性\n",
    "- 同时结合RNN的时间序列模拟能力，组合成编码器解码器结构进行时空预测。\n",
    "\n",
    "<center><img src=\"images/model_architecture.jpg\" alt=\"Drawing\" style=\"width: 900px;\" align=\"center\"/></center>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 数据准备\n",
    "本案例使用数据集为`METR-LA`。该数据是洛杉矶高速路上传感器记录的车辆速度信息。\n",
    "\n",
    "数据维度为`(34272 ,208 )`，表示：\n",
    "- 每5 分钟统计的速度信息，12行表示一小时\n",
    "- 一列时间维度信息，和207个传感器\n",
    "\n",
    "使用过去一小时历史向前预测未来 1 小时。\n",
    "<center><img src=\"images/metr-la.png\" alt=\"Drawing\" style=\"width: 400px;\" align=\"center\"/></center>\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "###  构建邻接矩阵\n",
    "\n",
    "对交通传感器的网络进行建模，将传感器抽象为有向图结构\n",
    "-  图 $G = (V, A)$\n",
    "- 顶点 $V$: 传感器\n",
    "- 邻接矩阵 $A$: 顶点之间的空间权重，根据路网交通的距离计算：\n",
    "$$exp(-\\frac {dist_{net}(v_i,v_j)^2}{\\sigma^2}),  \\mbox{if  }   dist_{net}(v_i,v_j)\\leq k$$\n",
    "\n",
    "其中，$dist_{net}(v_i,v_j)$  表示从 $v_i$ 到 $v_j$ 的**交通路网距离**， $k$ 为距离阈值， $\\sigma$ 为所有成对距离的标准差。\n",
    "\n",
    "> 邻接矩阵 $A$的作用等同于空间统计模型的空间权重矩阵，是模型对空间相关性的表达。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "#### 构建邻接矩阵的函数调用\n",
    "\n",
    "生成邻接矩阵文件的函数`generate_adj_matrix_pkl`参数为：\n",
    "\n",
    "参数 | 解释\n",
    "---|---\n",
    " input_file| 包含坐标信息的输入文件路径，文件必须包含经度，纬度，ID信息三列。\n",
    "output_dir|邻接矩阵文件的输出目录\n",
    "id_col| 坐标点ID列，支持字段名和字段索引，类型为字符串。\n",
    "long_col|经度坐标列，支持字段名和字段索引，类型为字符串。\n",
    "lat_col| 纬度坐标列，支持字段名和字段索引，类型为字符串。\n",
    "dist_file| 包含距离信息的输入文件路径。\n",
    "DEBUG| 是否打印信息，0表示不打印，1表示不打印，整型变量。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "在本案例中，参数`input_file`的值为`data/METR-LA/sensors_locations.csv`，该表格中记录了`METR-LA`数据集传感器的空间位置，其表格结构为"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "scrolled": false,
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>index</th>\n",
       "      <th>sensor_id</th>\n",
       "      <th>latitude</th>\n",
       "      <th>longitude</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>773869</td>\n",
       "      <td>34.15497</td>\n",
       "      <td>-118.31829</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>767541</td>\n",
       "      <td>34.11621</td>\n",
       "      <td>-118.23799</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>767542</td>\n",
       "      <td>34.11641</td>\n",
       "      <td>-118.23819</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>717447</td>\n",
       "      <td>34.07248</td>\n",
       "      <td>-118.26772</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>717446</td>\n",
       "      <td>34.07142</td>\n",
       "      <td>-118.26572</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   index  sensor_id  latitude  longitude\n",
       "0      0     773869  34.15497 -118.31829\n",
       "1      1     767541  34.11621 -118.23799\n",
       "2      2     767542  34.11641 -118.23819\n",
       "3      3     717447  34.07248 -118.26772\n",
       "4      4     717446  34.07142 -118.26572"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "pd.read_csv(\"data/METR-LA/sensors_locations.csv\").head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "参数`dist_file`包含的计算的距离信息。在本案例中，是各传感器在路网上的交通距离，需要考虑道路类型、道路单双行行方向等信息。其表格结构为"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "scrolled": true,
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>from</th>\n",
       "      <th>to</th>\n",
       "      <th>cost</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1201054</td>\n",
       "      <td>1201054</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1201054</td>\n",
       "      <td>1201066</td>\n",
       "      <td>2610.9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1201054</td>\n",
       "      <td>1201076</td>\n",
       "      <td>2822.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1201054</td>\n",
       "      <td>1201087</td>\n",
       "      <td>2911.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1201054</td>\n",
       "      <td>1201100</td>\n",
       "      <td>7160.1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      from       to    cost\n",
       "0  1201054  1201054     0.0\n",
       "1  1201054  1201066  2610.9\n",
       "2  1201054  1201076  2822.7\n",
       "3  1201054  1201087  2911.5\n",
       "4  1201054  1201100  7160.1"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "pd.read_csv(\"data/METR-LA/distances_la_2012.csv\").head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "生成邻接矩阵的实例代码："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "scrolled": false,
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[INFO] Loading input data data/METR-LA/sensors_locations.csv for computing adj mat\n",
      "[INFO] Shape of Data (207, 4)\n",
      "[INFO] Reading external distance files...\n",
      "[INFO] Writing adj matrix to data/METR-LA/adj_mat.pkl\n",
      "[INFO] Finishing generate adj matrix!\n"
     ]
    }
   ],
   "source": [
    "from scripts.gen_adj_mx import  generate_adj_matrix_pkl\n",
    "## 构建邻接矩阵\n",
    "generate_adj_matrix_pkl(input_file = \"data/METR-LA/sensors_locations.csv\",                       \n",
    "                         output_dir = \"data/METR-LA\",                       \n",
    "                         id_col= \"1\",    # 第二列是id_col                            \n",
    "                         long_col= \"3\",                           \n",
    "                         lat_col= \"2\",                              \n",
    "                         dist_file = \"data/METR-LA/distances_la_2012.csv\",                         \n",
    "                         DEBUG=0)                                   "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "生成的邻接矩阵存放在`output_dir`指定的位置下，文件名为`adj_mat.pkl`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "scrolled": true,
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "data/METR-LA/adj_mat.pkl\r\n"
     ]
    }
   ],
   "source": [
    "# 查看生成文件\n",
    "! ls  data/METR-LA/adj_mat.pkl"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "###  构建数据集\n",
    "\n",
    "#### 图序列编码\n",
    "对历史车速信息在时间上维度进行序列编码，从原始表格数据，转换为模型所需要的编码信息。\n",
    "\n",
    "将历史车速信息抽象为$t$时刻的图$G$上的观测信号，时空预测问题可以建模为根据$X_{t-T'+1}$到$X_t$时刻的图序列预测$X_{t+1}$到$X_{t+T}$时刻的未来车速。\n",
    "\n",
    "<center><img src=\"images/graph_series.png\" alt=\"Drawing\" style=\"width: 1100px;\"/></center>\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "#### 划分数据集\n",
    "按照默认`7:2:1`的比例划分数据集为训练集、测试集和验证集，作为编码器解码器的输入序列编码。各部分数据功能如下：\n",
    "- 训练集为模型训练的参数学习提供样本信息\n",
    "- 验证集用于模型训练过程中的误差验证，但不参与模型学习过程\n",
    "- 测试集用于模型训练完毕后的测试，完全不参与模型训练过程。\n",
    "\n",
    "在本案例中，默认取前70%的序列信息为训练集，测试集为序列最后20%的信息，中间的10%为验证集。其中，训练集和测试集为计算误差，要依次取得未来一小时数据。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "#### 构建训练集的函数调用\n",
    "\n",
    "生成邻接矩阵文件的函数`generate_training_data`参数为：\n",
    "\n",
    "参数 | 解释\n",
    "---|---\n",
    "input_df| 输入数据的路径，表格的每一列代表一个观测位置，本案例为传感器的ID\n",
    "output_dir| 训练集数据的输出路径\n",
    "train_rate| 训练集的划分比例，默认为0.7\n",
    "test_rate| 测试集的划分比例，默认为0.2\n",
    "index_col | 时间索引列，字符串变量，默认为\"0\"，表示第一列是时间索引。\n",
    "step_rows | 序列预测步长的行数，整型变量，默认为12，表示一个步长包含12行。\n",
    "period_len | 时间周期长度，整型变量，默认为3，表示周期长度为3\n",
    "period_steps | 时间周期的步长数，整型变量，默认为24，表示一个时间周期含24个步长\n",
    "period_units  | 时间周期的单位，字符串类型，默认为'D'，表示天\n",
    "add_time_in_period | 是否添加周期性时间信息，逻辑型，默认为`True`\n",
    "\n",
    "> 构造训练集时，在不考虑period周期特征时，数据从`step_rows`行开始；否则，从`period_len` × `period_rows`开始；数据从最后倒序向前的 `step_rows`行结束，即数据前后都要预留出至少一个步长的数据用于计算误差。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "在本案例中，参数`input_df`的值为`data/METR-LA/metr_la.csv`，该表格中记录了`METR-LA`数据集各传感器的各时刻记录的速度，其表格结构为"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "scrolled": true,
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>time</th>\n",
       "      <th>773869</th>\n",
       "      <th>767541</th>\n",
       "      <th>767542</th>\n",
       "      <th>717447</th>\n",
       "      <th>717446</th>\n",
       "      <th>717445</th>\n",
       "      <th>773062</th>\n",
       "      <th>767620</th>\n",
       "      <th>737529</th>\n",
       "      <th>...</th>\n",
       "      <th>772167</th>\n",
       "      <th>769372</th>\n",
       "      <th>774204</th>\n",
       "      <th>769806</th>\n",
       "      <th>717590</th>\n",
       "      <th>717592</th>\n",
       "      <th>717595</th>\n",
       "      <th>772168</th>\n",
       "      <th>718141</th>\n",
       "      <th>769373</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2012-03-01 00:00:00</td>\n",
       "      <td>64.375000</td>\n",
       "      <td>67.625000</td>\n",
       "      <td>67.125000</td>\n",
       "      <td>61.500000</td>\n",
       "      <td>66.875000</td>\n",
       "      <td>68.750000</td>\n",
       "      <td>65.125000</td>\n",
       "      <td>67.125000</td>\n",
       "      <td>59.625000</td>\n",
       "      <td>...</td>\n",
       "      <td>45.625000</td>\n",
       "      <td>65.500000</td>\n",
       "      <td>64.500000</td>\n",
       "      <td>66.428571</td>\n",
       "      <td>66.875000</td>\n",
       "      <td>59.375000</td>\n",
       "      <td>69.000000</td>\n",
       "      <td>59.250000</td>\n",
       "      <td>69.000000</td>\n",
       "      <td>61.875000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2012-03-01 00:05:00</td>\n",
       "      <td>62.666667</td>\n",
       "      <td>68.555556</td>\n",
       "      <td>65.444444</td>\n",
       "      <td>62.444444</td>\n",
       "      <td>64.444444</td>\n",
       "      <td>68.111111</td>\n",
       "      <td>65.000000</td>\n",
       "      <td>65.000000</td>\n",
       "      <td>57.444444</td>\n",
       "      <td>...</td>\n",
       "      <td>50.666667</td>\n",
       "      <td>69.875000</td>\n",
       "      <td>66.666667</td>\n",
       "      <td>58.555556</td>\n",
       "      <td>62.000000</td>\n",
       "      <td>61.111111</td>\n",
       "      <td>64.444444</td>\n",
       "      <td>55.888889</td>\n",
       "      <td>68.444444</td>\n",
       "      <td>62.875000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2012-03-01 00:10:00</td>\n",
       "      <td>64.000000</td>\n",
       "      <td>63.750000</td>\n",
       "      <td>60.000000</td>\n",
       "      <td>59.000000</td>\n",
       "      <td>66.500000</td>\n",
       "      <td>66.250000</td>\n",
       "      <td>64.500000</td>\n",
       "      <td>64.250000</td>\n",
       "      <td>63.875000</td>\n",
       "      <td>...</td>\n",
       "      <td>44.125000</td>\n",
       "      <td>69.000000</td>\n",
       "      <td>56.500000</td>\n",
       "      <td>59.250000</td>\n",
       "      <td>68.125000</td>\n",
       "      <td>62.500000</td>\n",
       "      <td>65.625000</td>\n",
       "      <td>61.375000</td>\n",
       "      <td>69.857143</td>\n",
       "      <td>62.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2012-03-01 00:15:00</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2012-03-01 00:20:00</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2012-03-01 00:25:00</td>\n",
       "      <td>57.333333</td>\n",
       "      <td>69.000000</td>\n",
       "      <td>67.666667</td>\n",
       "      <td>61.666667</td>\n",
       "      <td>67.333333</td>\n",
       "      <td>69.000000</td>\n",
       "      <td>60.666667</td>\n",
       "      <td>67.333333</td>\n",
       "      <td>63.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>42.000000</td>\n",
       "      <td>70.000000</td>\n",
       "      <td>68.333333</td>\n",
       "      <td>57.333333</td>\n",
       "      <td>66.000000</td>\n",
       "      <td>54.666667</td>\n",
       "      <td>64.666667</td>\n",
       "      <td>57.666667</td>\n",
       "      <td>69.000000</td>\n",
       "      <td>57.333333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2012-03-01 00:30:00</td>\n",
       "      <td>66.500000</td>\n",
       "      <td>63.875000</td>\n",
       "      <td>67.875000</td>\n",
       "      <td>62.375000</td>\n",
       "      <td>64.375000</td>\n",
       "      <td>67.750000</td>\n",
       "      <td>65.125000</td>\n",
       "      <td>64.875000</td>\n",
       "      <td>56.250000</td>\n",
       "      <td>...</td>\n",
       "      <td>41.250000</td>\n",
       "      <td>69.375000</td>\n",
       "      <td>59.500000</td>\n",
       "      <td>44.625000</td>\n",
       "      <td>64.250000</td>\n",
       "      <td>62.625000</td>\n",
       "      <td>65.500000</td>\n",
       "      <td>51.000000</td>\n",
       "      <td>69.375000</td>\n",
       "      <td>61.250000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2012-03-01 00:35:00</td>\n",
       "      <td>63.625000</td>\n",
       "      <td>67.250000</td>\n",
       "      <td>63.250000</td>\n",
       "      <td>60.500000</td>\n",
       "      <td>57.375000</td>\n",
       "      <td>65.500000</td>\n",
       "      <td>64.625000</td>\n",
       "      <td>65.500000</td>\n",
       "      <td>60.375000</td>\n",
       "      <td>...</td>\n",
       "      <td>52.000000</td>\n",
       "      <td>65.875000</td>\n",
       "      <td>59.750000</td>\n",
       "      <td>64.125000</td>\n",
       "      <td>66.125000</td>\n",
       "      <td>62.375000</td>\n",
       "      <td>67.500000</td>\n",
       "      <td>52.000000</td>\n",
       "      <td>68.625000</td>\n",
       "      <td>59.375000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>2012-03-01 00:40:00</td>\n",
       "      <td>68.750000</td>\n",
       "      <td>65.250000</td>\n",
       "      <td>63.500000</td>\n",
       "      <td>63.000000</td>\n",
       "      <td>65.125000</td>\n",
       "      <td>68.000000</td>\n",
       "      <td>65.125000</td>\n",
       "      <td>63.750000</td>\n",
       "      <td>62.625000</td>\n",
       "      <td>...</td>\n",
       "      <td>52.500000</td>\n",
       "      <td>68.375000</td>\n",
       "      <td>61.250000</td>\n",
       "      <td>64.375000</td>\n",
       "      <td>66.500000</td>\n",
       "      <td>66.250000</td>\n",
       "      <td>64.375000</td>\n",
       "      <td>48.625000</td>\n",
       "      <td>67.625000</td>\n",
       "      <td>61.750000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>2012-03-01 00:45:00</td>\n",
       "      <td>63.500000</td>\n",
       "      <td>61.500000</td>\n",
       "      <td>62.500000</td>\n",
       "      <td>58.125000</td>\n",
       "      <td>66.625000</td>\n",
       "      <td>64.250000</td>\n",
       "      <td>64.875000</td>\n",
       "      <td>66.500000</td>\n",
       "      <td>53.250000</td>\n",
       "      <td>...</td>\n",
       "      <td>41.375000</td>\n",
       "      <td>69.250000</td>\n",
       "      <td>62.625000</td>\n",
       "      <td>58.875000</td>\n",
       "      <td>61.125000</td>\n",
       "      <td>64.250000</td>\n",
       "      <td>66.125000</td>\n",
       "      <td>50.750000</td>\n",
       "      <td>66.250000</td>\n",
       "      <td>62.250000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>2012-03-01 00:50:00</td>\n",
       "      <td>65.222222</td>\n",
       "      <td>63.666667</td>\n",
       "      <td>65.111111</td>\n",
       "      <td>61.111111</td>\n",
       "      <td>66.555556</td>\n",
       "      <td>67.111111</td>\n",
       "      <td>65.000000</td>\n",
       "      <td>60.888889</td>\n",
       "      <td>47.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>45.000000</td>\n",
       "      <td>65.500000</td>\n",
       "      <td>57.666667</td>\n",
       "      <td>57.444444</td>\n",
       "      <td>67.666667</td>\n",
       "      <td>64.777778</td>\n",
       "      <td>62.888889</td>\n",
       "      <td>60.555556</td>\n",
       "      <td>67.222222</td>\n",
       "      <td>60.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>2012-03-01 00:55:00</td>\n",
       "      <td>62.250000</td>\n",
       "      <td>67.750000</td>\n",
       "      <td>66.875000</td>\n",
       "      <td>60.000000</td>\n",
       "      <td>64.750000</td>\n",
       "      <td>66.285714</td>\n",
       "      <td>61.250000</td>\n",
       "      <td>63.250000</td>\n",
       "      <td>52.625000</td>\n",
       "      <td>...</td>\n",
       "      <td>44.625000</td>\n",
       "      <td>68.142857</td>\n",
       "      <td>60.000000</td>\n",
       "      <td>58.750000</td>\n",
       "      <td>61.500000</td>\n",
       "      <td>62.125000</td>\n",
       "      <td>68.500000</td>\n",
       "      <td>57.000000</td>\n",
       "      <td>66.500000</td>\n",
       "      <td>59.428571</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>2012-03-01 01:00:00</td>\n",
       "      <td>61.125000</td>\n",
       "      <td>67.000000</td>\n",
       "      <td>58.500000</td>\n",
       "      <td>62.250000</td>\n",
       "      <td>66.375000</td>\n",
       "      <td>67.500000</td>\n",
       "      <td>63.125000</td>\n",
       "      <td>68.375000</td>\n",
       "      <td>56.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>42.375000</td>\n",
       "      <td>69.000000</td>\n",
       "      <td>53.625000</td>\n",
       "      <td>55.142857</td>\n",
       "      <td>69.250000</td>\n",
       "      <td>61.750000</td>\n",
       "      <td>61.875000</td>\n",
       "      <td>53.125000</td>\n",
       "      <td>70.000000</td>\n",
       "      <td>63.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>2012-03-01 01:05:00</td>\n",
       "      <td>58.555556</td>\n",
       "      <td>62.666667</td>\n",
       "      <td>65.777778</td>\n",
       "      <td>59.777778</td>\n",
       "      <td>66.888889</td>\n",
       "      <td>64.333333</td>\n",
       "      <td>66.111111</td>\n",
       "      <td>65.666667</td>\n",
       "      <td>59.222222</td>\n",
       "      <td>...</td>\n",
       "      <td>42.000000</td>\n",
       "      <td>66.222222</td>\n",
       "      <td>61.333333</td>\n",
       "      <td>55.333333</td>\n",
       "      <td>61.777778</td>\n",
       "      <td>64.000000</td>\n",
       "      <td>64.000000</td>\n",
       "      <td>52.555556</td>\n",
       "      <td>66.222222</td>\n",
       "      <td>62.333333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>2012-03-01 01:10:00</td>\n",
       "      <td>63.625000</td>\n",
       "      <td>67.000000</td>\n",
       "      <td>55.000000</td>\n",
       "      <td>59.125000</td>\n",
       "      <td>67.625000</td>\n",
       "      <td>67.000000</td>\n",
       "      <td>65.125000</td>\n",
       "      <td>62.375000</td>\n",
       "      <td>59.875000</td>\n",
       "      <td>...</td>\n",
       "      <td>44.375000</td>\n",
       "      <td>65.875000</td>\n",
       "      <td>59.000000</td>\n",
       "      <td>53.000000</td>\n",
       "      <td>67.375000</td>\n",
       "      <td>66.250000</td>\n",
       "      <td>68.250000</td>\n",
       "      <td>54.250000</td>\n",
       "      <td>67.250000</td>\n",
       "      <td>58.375000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>2012-03-01 01:15:00</td>\n",
       "      <td>66.777778</td>\n",
       "      <td>65.555556</td>\n",
       "      <td>68.111111</td>\n",
       "      <td>59.888889</td>\n",
       "      <td>61.333333</td>\n",
       "      <td>68.333333</td>\n",
       "      <td>59.666667</td>\n",
       "      <td>66.888889</td>\n",
       "      <td>57.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>43.777778</td>\n",
       "      <td>61.555556</td>\n",
       "      <td>62.777778</td>\n",
       "      <td>56.500000</td>\n",
       "      <td>53.555556</td>\n",
       "      <td>62.666667</td>\n",
       "      <td>68.000000</td>\n",
       "      <td>61.111111</td>\n",
       "      <td>68.222222</td>\n",
       "      <td>61.444444</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>2012-03-01 01:20:00</td>\n",
       "      <td>55.875000</td>\n",
       "      <td>65.500000</td>\n",
       "      <td>60.750000</td>\n",
       "      <td>57.250000</td>\n",
       "      <td>67.875000</td>\n",
       "      <td>65.000000</td>\n",
       "      <td>64.875000</td>\n",
       "      <td>66.500000</td>\n",
       "      <td>60.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>40.375000</td>\n",
       "      <td>65.428571</td>\n",
       "      <td>60.750000</td>\n",
       "      <td>61.000000</td>\n",
       "      <td>62.625000</td>\n",
       "      <td>57.875000</td>\n",
       "      <td>59.750000</td>\n",
       "      <td>51.125000</td>\n",
       "      <td>66.000000</td>\n",
       "      <td>60.285714</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>2012-03-01 01:25:00</td>\n",
       "      <td>64.333333</td>\n",
       "      <td>66.000000</td>\n",
       "      <td>68.222222</td>\n",
       "      <td>64.777778</td>\n",
       "      <td>68.333333</td>\n",
       "      <td>65.111111</td>\n",
       "      <td>66.555556</td>\n",
       "      <td>66.444444</td>\n",
       "      <td>48.777778</td>\n",
       "      <td>...</td>\n",
       "      <td>49.888889</td>\n",
       "      <td>66.222222</td>\n",
       "      <td>55.888889</td>\n",
       "      <td>60.111111</td>\n",
       "      <td>56.666667</td>\n",
       "      <td>61.111111</td>\n",
       "      <td>65.000000</td>\n",
       "      <td>59.444444</td>\n",
       "      <td>69.222222</td>\n",
       "      <td>62.111111</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>2012-03-01 01:30:00</td>\n",
       "      <td>63.888889</td>\n",
       "      <td>61.555556</td>\n",
       "      <td>68.111111</td>\n",
       "      <td>57.666667</td>\n",
       "      <td>65.000000</td>\n",
       "      <td>65.111111</td>\n",
       "      <td>65.222222</td>\n",
       "      <td>63.888889</td>\n",
       "      <td>53.444444</td>\n",
       "      <td>...</td>\n",
       "      <td>41.000000</td>\n",
       "      <td>67.666667</td>\n",
       "      <td>54.888889</td>\n",
       "      <td>53.333333</td>\n",
       "      <td>64.000000</td>\n",
       "      <td>63.555556</td>\n",
       "      <td>68.777778</td>\n",
       "      <td>61.666667</td>\n",
       "      <td>65.888889</td>\n",
       "      <td>54.888889</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>2012-03-01 01:35:00</td>\n",
       "      <td>63.125000</td>\n",
       "      <td>63.875000</td>\n",
       "      <td>65.375000</td>\n",
       "      <td>60.250000</td>\n",
       "      <td>62.500000</td>\n",
       "      <td>67.125000</td>\n",
       "      <td>63.875000</td>\n",
       "      <td>62.625000</td>\n",
       "      <td>60.500000</td>\n",
       "      <td>...</td>\n",
       "      <td>39.500000</td>\n",
       "      <td>63.375000</td>\n",
       "      <td>59.250000</td>\n",
       "      <td>60.500000</td>\n",
       "      <td>42.500000</td>\n",
       "      <td>64.750000</td>\n",
       "      <td>64.750000</td>\n",
       "      <td>59.000000</td>\n",
       "      <td>67.000000</td>\n",
       "      <td>57.750000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>2012-03-01 01:40:00</td>\n",
       "      <td>62.125000</td>\n",
       "      <td>61.250000</td>\n",
       "      <td>60.750000</td>\n",
       "      <td>61.375000</td>\n",
       "      <td>59.125000</td>\n",
       "      <td>65.125000</td>\n",
       "      <td>65.250000</td>\n",
       "      <td>66.375000</td>\n",
       "      <td>52.500000</td>\n",
       "      <td>...</td>\n",
       "      <td>46.750000</td>\n",
       "      <td>69.625000</td>\n",
       "      <td>54.750000</td>\n",
       "      <td>48.500000</td>\n",
       "      <td>64.375000</td>\n",
       "      <td>63.750000</td>\n",
       "      <td>61.250000</td>\n",
       "      <td>64.375000</td>\n",
       "      <td>66.250000</td>\n",
       "      <td>56.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>2012-03-01 01:45:00</td>\n",
       "      <td>61.500000</td>\n",
       "      <td>62.000000</td>\n",
       "      <td>62.125000</td>\n",
       "      <td>59.375000</td>\n",
       "      <td>62.625000</td>\n",
       "      <td>67.750000</td>\n",
       "      <td>55.750000</td>\n",
       "      <td>65.500000</td>\n",
       "      <td>60.875000</td>\n",
       "      <td>...</td>\n",
       "      <td>45.000000</td>\n",
       "      <td>67.875000</td>\n",
       "      <td>56.625000</td>\n",
       "      <td>47.875000</td>\n",
       "      <td>55.750000</td>\n",
       "      <td>58.875000</td>\n",
       "      <td>66.625000</td>\n",
       "      <td>60.375000</td>\n",
       "      <td>70.000000</td>\n",
       "      <td>58.250000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>2012-03-01 01:50:00</td>\n",
       "      <td>63.222222</td>\n",
       "      <td>64.111111</td>\n",
       "      <td>64.333333</td>\n",
       "      <td>59.888889</td>\n",
       "      <td>67.000000</td>\n",
       "      <td>67.666667</td>\n",
       "      <td>66.222222</td>\n",
       "      <td>63.777778</td>\n",
       "      <td>52.666667</td>\n",
       "      <td>...</td>\n",
       "      <td>43.888889</td>\n",
       "      <td>67.555556</td>\n",
       "      <td>58.222222</td>\n",
       "      <td>53.875000</td>\n",
       "      <td>60.777778</td>\n",
       "      <td>55.222222</td>\n",
       "      <td>61.555556</td>\n",
       "      <td>62.222222</td>\n",
       "      <td>67.333333</td>\n",
       "      <td>63.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>2012-03-01 01:55:00</td>\n",
       "      <td>65.000000</td>\n",
       "      <td>63.000000</td>\n",
       "      <td>69.000000</td>\n",
       "      <td>58.875000</td>\n",
       "      <td>67.875000</td>\n",
       "      <td>65.750000</td>\n",
       "      <td>67.625000</td>\n",
       "      <td>62.125000</td>\n",
       "      <td>50.875000</td>\n",
       "      <td>...</td>\n",
       "      <td>44.250000</td>\n",
       "      <td>66.000000</td>\n",
       "      <td>52.875000</td>\n",
       "      <td>59.375000</td>\n",
       "      <td>54.000000</td>\n",
       "      <td>59.000000</td>\n",
       "      <td>66.125000</td>\n",
       "      <td>62.000000</td>\n",
       "      <td>64.125000</td>\n",
       "      <td>60.750000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>2012-03-01 02:00:00</td>\n",
       "      <td>53.555556</td>\n",
       "      <td>65.777778</td>\n",
       "      <td>64.333333</td>\n",
       "      <td>60.444444</td>\n",
       "      <td>66.666667</td>\n",
       "      <td>67.111111</td>\n",
       "      <td>65.666667</td>\n",
       "      <td>65.222222</td>\n",
       "      <td>52.111111</td>\n",
       "      <td>...</td>\n",
       "      <td>48.777778</td>\n",
       "      <td>67.444444</td>\n",
       "      <td>44.333333</td>\n",
       "      <td>61.111111</td>\n",
       "      <td>65.222222</td>\n",
       "      <td>56.666667</td>\n",
       "      <td>65.222222</td>\n",
       "      <td>65.000000</td>\n",
       "      <td>62.888889</td>\n",
       "      <td>62.111111</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>2012-03-01 02:05:00</td>\n",
       "      <td>62.125000</td>\n",
       "      <td>67.750000</td>\n",
       "      <td>63.125000</td>\n",
       "      <td>59.875000</td>\n",
       "      <td>65.125000</td>\n",
       "      <td>66.000000</td>\n",
       "      <td>66.750000</td>\n",
       "      <td>68.125000</td>\n",
       "      <td>61.500000</td>\n",
       "      <td>...</td>\n",
       "      <td>36.750000</td>\n",
       "      <td>61.375000</td>\n",
       "      <td>58.250000</td>\n",
       "      <td>58.500000</td>\n",
       "      <td>60.875000</td>\n",
       "      <td>61.000000</td>\n",
       "      <td>69.625000</td>\n",
       "      <td>61.375000</td>\n",
       "      <td>68.625000</td>\n",
       "      <td>49.375000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>2012-03-01 02:10:00</td>\n",
       "      <td>61.555556</td>\n",
       "      <td>65.222222</td>\n",
       "      <td>66.111111</td>\n",
       "      <td>58.777778</td>\n",
       "      <td>64.888889</td>\n",
       "      <td>65.777778</td>\n",
       "      <td>60.500000</td>\n",
       "      <td>64.666667</td>\n",
       "      <td>60.555556</td>\n",
       "      <td>...</td>\n",
       "      <td>38.555556</td>\n",
       "      <td>64.000000</td>\n",
       "      <td>59.000000</td>\n",
       "      <td>53.222222</td>\n",
       "      <td>53.888889</td>\n",
       "      <td>58.333333</td>\n",
       "      <td>61.000000</td>\n",
       "      <td>67.222222</td>\n",
       "      <td>69.000000</td>\n",
       "      <td>60.444444</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>2012-03-01 02:15:00</td>\n",
       "      <td>59.875000</td>\n",
       "      <td>64.125000</td>\n",
       "      <td>67.250000</td>\n",
       "      <td>63.375000</td>\n",
       "      <td>68.250000</td>\n",
       "      <td>66.875000</td>\n",
       "      <td>64.500000</td>\n",
       "      <td>62.750000</td>\n",
       "      <td>56.750000</td>\n",
       "      <td>...</td>\n",
       "      <td>41.250000</td>\n",
       "      <td>67.625000</td>\n",
       "      <td>61.625000</td>\n",
       "      <td>55.625000</td>\n",
       "      <td>57.875000</td>\n",
       "      <td>66.625000</td>\n",
       "      <td>67.625000</td>\n",
       "      <td>67.250000</td>\n",
       "      <td>65.750000</td>\n",
       "      <td>62.875000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>2012-03-01 02:20:00</td>\n",
       "      <td>68.000000</td>\n",
       "      <td>65.888889</td>\n",
       "      <td>64.000000</td>\n",
       "      <td>56.333333</td>\n",
       "      <td>67.000000</td>\n",
       "      <td>63.888889</td>\n",
       "      <td>67.222222</td>\n",
       "      <td>65.444444</td>\n",
       "      <td>53.777778</td>\n",
       "      <td>...</td>\n",
       "      <td>48.888889</td>\n",
       "      <td>68.555556</td>\n",
       "      <td>52.888889</td>\n",
       "      <td>44.888889</td>\n",
       "      <td>59.111111</td>\n",
       "      <td>61.222222</td>\n",
       "      <td>66.222222</td>\n",
       "      <td>65.888889</td>\n",
       "      <td>67.444444</td>\n",
       "      <td>60.777778</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>2012-03-01 02:25:00</td>\n",
       "      <td>65.375000</td>\n",
       "      <td>63.875000</td>\n",
       "      <td>64.500000</td>\n",
       "      <td>58.125000</td>\n",
       "      <td>66.500000</td>\n",
       "      <td>63.625000</td>\n",
       "      <td>64.125000</td>\n",
       "      <td>65.875000</td>\n",
       "      <td>46.375000</td>\n",
       "      <td>...</td>\n",
       "      <td>41.000000</td>\n",
       "      <td>62.625000</td>\n",
       "      <td>62.750000</td>\n",
       "      <td>58.625000</td>\n",
       "      <td>54.375000</td>\n",
       "      <td>64.750000</td>\n",
       "      <td>60.375000</td>\n",
       "      <td>61.875000</td>\n",
       "      <td>68.625000</td>\n",
       "      <td>56.750000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34242</th>\n",
       "      <td>2012-06-27 21:30:00</td>\n",
       "      <td>66.875000</td>\n",
       "      <td>64.375000</td>\n",
       "      <td>68.375000</td>\n",
       "      <td>49.875000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>52.000000</td>\n",
       "      <td>58.625000</td>\n",
       "      <td>65.750000</td>\n",
       "      <td>63.500000</td>\n",
       "      <td>...</td>\n",
       "      <td>46.125000</td>\n",
       "      <td>69.125000</td>\n",
       "      <td>65.625000</td>\n",
       "      <td>65.125000</td>\n",
       "      <td>68.625000</td>\n",
       "      <td>63.625000</td>\n",
       "      <td>65.375000</td>\n",
       "      <td>66.125000</td>\n",
       "      <td>66.875000</td>\n",
       "      <td>62.375000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34243</th>\n",
       "      <td>2012-06-27 21:35:00</td>\n",
       "      <td>66.250000</td>\n",
       "      <td>65.000000</td>\n",
       "      <td>68.333333</td>\n",
       "      <td>57.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>56.444444</td>\n",
       "      <td>63.000000</td>\n",
       "      <td>64.111111</td>\n",
       "      <td>63.375000</td>\n",
       "      <td>...</td>\n",
       "      <td>43.666667</td>\n",
       "      <td>68.333333</td>\n",
       "      <td>64.750000</td>\n",
       "      <td>62.666667</td>\n",
       "      <td>68.777778</td>\n",
       "      <td>63.333333</td>\n",
       "      <td>69.000000</td>\n",
       "      <td>63.333333</td>\n",
       "      <td>68.000000</td>\n",
       "      <td>63.222222</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34244</th>\n",
       "      <td>2012-06-27 21:40:00</td>\n",
       "      <td>69.000000</td>\n",
       "      <td>65.625000</td>\n",
       "      <td>69.625000</td>\n",
       "      <td>56.625000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>56.125000</td>\n",
       "      <td>58.125000</td>\n",
       "      <td>64.875000</td>\n",
       "      <td>65.250000</td>\n",
       "      <td>...</td>\n",
       "      <td>48.625000</td>\n",
       "      <td>69.875000</td>\n",
       "      <td>62.875000</td>\n",
       "      <td>64.000000</td>\n",
       "      <td>67.750000</td>\n",
       "      <td>63.875000</td>\n",
       "      <td>67.875000</td>\n",
       "      <td>65.625000</td>\n",
       "      <td>68.000000</td>\n",
       "      <td>64.125000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34245</th>\n",
       "      <td>2012-06-27 21:45:00</td>\n",
       "      <td>66.125000</td>\n",
       "      <td>65.250000</td>\n",
       "      <td>69.500000</td>\n",
       "      <td>56.250000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>59.375000</td>\n",
       "      <td>59.000000</td>\n",
       "      <td>64.000000</td>\n",
       "      <td>62.875000</td>\n",
       "      <td>...</td>\n",
       "      <td>47.500000</td>\n",
       "      <td>68.625000</td>\n",
       "      <td>64.714286</td>\n",
       "      <td>63.125000</td>\n",
       "      <td>67.857143</td>\n",
       "      <td>63.375000</td>\n",
       "      <td>67.500000</td>\n",
       "      <td>64.125000</td>\n",
       "      <td>68.000000</td>\n",
       "      <td>63.250000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34246</th>\n",
       "      <td>2012-06-27 21:50:00</td>\n",
       "      <td>66.555556</td>\n",
       "      <td>66.333333</td>\n",
       "      <td>69.333333</td>\n",
       "      <td>56.333333</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>61.333333</td>\n",
       "      <td>61.222222</td>\n",
       "      <td>64.222222</td>\n",
       "      <td>61.222222</td>\n",
       "      <td>...</td>\n",
       "      <td>47.777778</td>\n",
       "      <td>69.444444</td>\n",
       "      <td>64.444444</td>\n",
       "      <td>64.500000</td>\n",
       "      <td>67.111111</td>\n",
       "      <td>62.888889</td>\n",
       "      <td>68.333333</td>\n",
       "      <td>65.333333</td>\n",
       "      <td>65.555556</td>\n",
       "      <td>63.111111</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34247</th>\n",
       "      <td>2012-06-27 21:55:00</td>\n",
       "      <td>66.777778</td>\n",
       "      <td>66.444444</td>\n",
       "      <td>69.666667</td>\n",
       "      <td>57.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>59.555556</td>\n",
       "      <td>62.888889</td>\n",
       "      <td>63.555556</td>\n",
       "      <td>62.555556</td>\n",
       "      <td>...</td>\n",
       "      <td>46.888889</td>\n",
       "      <td>67.125000</td>\n",
       "      <td>62.000000</td>\n",
       "      <td>57.333333</td>\n",
       "      <td>68.111111</td>\n",
       "      <td>62.777778</td>\n",
       "      <td>65.888889</td>\n",
       "      <td>65.333333</td>\n",
       "      <td>67.111111</td>\n",
       "      <td>64.250000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34248</th>\n",
       "      <td>2012-06-27 22:00:00</td>\n",
       "      <td>66.666667</td>\n",
       "      <td>66.222222</td>\n",
       "      <td>68.888889</td>\n",
       "      <td>57.111111</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>59.555556</td>\n",
       "      <td>58.222222</td>\n",
       "      <td>66.111111</td>\n",
       "      <td>61.777778</td>\n",
       "      <td>...</td>\n",
       "      <td>47.111111</td>\n",
       "      <td>68.444444</td>\n",
       "      <td>63.777778</td>\n",
       "      <td>62.000000</td>\n",
       "      <td>67.555556</td>\n",
       "      <td>61.000000</td>\n",
       "      <td>67.222222</td>\n",
       "      <td>66.444444</td>\n",
       "      <td>65.222222</td>\n",
       "      <td>62.333333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34249</th>\n",
       "      <td>2012-06-27 22:05:00</td>\n",
       "      <td>69.000000</td>\n",
       "      <td>64.625000</td>\n",
       "      <td>68.750000</td>\n",
       "      <td>53.875000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>57.250000</td>\n",
       "      <td>61.375000</td>\n",
       "      <td>65.875000</td>\n",
       "      <td>62.875000</td>\n",
       "      <td>...</td>\n",
       "      <td>48.375000</td>\n",
       "      <td>68.125000</td>\n",
       "      <td>60.875000</td>\n",
       "      <td>61.625000</td>\n",
       "      <td>67.875000</td>\n",
       "      <td>49.125000</td>\n",
       "      <td>66.625000</td>\n",
       "      <td>65.250000</td>\n",
       "      <td>67.750000</td>\n",
       "      <td>60.875000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34250</th>\n",
       "      <td>2012-06-27 22:10:00</td>\n",
       "      <td>68.250000</td>\n",
       "      <td>64.250000</td>\n",
       "      <td>67.750000</td>\n",
       "      <td>53.875000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>54.500000</td>\n",
       "      <td>58.500000</td>\n",
       "      <td>62.500000</td>\n",
       "      <td>65.375000</td>\n",
       "      <td>...</td>\n",
       "      <td>45.250000</td>\n",
       "      <td>68.250000</td>\n",
       "      <td>65.250000</td>\n",
       "      <td>64.000000</td>\n",
       "      <td>63.875000</td>\n",
       "      <td>53.000000</td>\n",
       "      <td>65.625000</td>\n",
       "      <td>66.000000</td>\n",
       "      <td>65.375000</td>\n",
       "      <td>63.625000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34251</th>\n",
       "      <td>2012-06-27 22:15:00</td>\n",
       "      <td>66.555556</td>\n",
       "      <td>64.888889</td>\n",
       "      <td>68.222222</td>\n",
       "      <td>56.888889</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>54.777778</td>\n",
       "      <td>59.555556</td>\n",
       "      <td>64.888889</td>\n",
       "      <td>59.666667</td>\n",
       "      <td>...</td>\n",
       "      <td>45.333333</td>\n",
       "      <td>68.111111</td>\n",
       "      <td>62.444444</td>\n",
       "      <td>61.222222</td>\n",
       "      <td>67.555556</td>\n",
       "      <td>49.111111</td>\n",
       "      <td>68.222222</td>\n",
       "      <td>66.000000</td>\n",
       "      <td>67.111111</td>\n",
       "      <td>62.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34252</th>\n",
       "      <td>2012-06-27 22:20:00</td>\n",
       "      <td>68.875000</td>\n",
       "      <td>65.750000</td>\n",
       "      <td>69.375000</td>\n",
       "      <td>56.625000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>60.125000</td>\n",
       "      <td>60.250000</td>\n",
       "      <td>64.500000</td>\n",
       "      <td>64.125000</td>\n",
       "      <td>...</td>\n",
       "      <td>44.750000</td>\n",
       "      <td>67.875000</td>\n",
       "      <td>63.875000</td>\n",
       "      <td>62.125000</td>\n",
       "      <td>66.625000</td>\n",
       "      <td>56.375000</td>\n",
       "      <td>68.000000</td>\n",
       "      <td>65.625000</td>\n",
       "      <td>67.125000</td>\n",
       "      <td>63.875000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34253</th>\n",
       "      <td>2012-06-27 22:25:00</td>\n",
       "      <td>67.750000</td>\n",
       "      <td>57.750000</td>\n",
       "      <td>59.125000</td>\n",
       "      <td>52.500000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>55.375000</td>\n",
       "      <td>60.750000</td>\n",
       "      <td>64.625000</td>\n",
       "      <td>63.125000</td>\n",
       "      <td>...</td>\n",
       "      <td>45.500000</td>\n",
       "      <td>69.375000</td>\n",
       "      <td>63.125000</td>\n",
       "      <td>64.000000</td>\n",
       "      <td>66.250000</td>\n",
       "      <td>66.000000</td>\n",
       "      <td>67.500000</td>\n",
       "      <td>64.625000</td>\n",
       "      <td>65.125000</td>\n",
       "      <td>63.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34254</th>\n",
       "      <td>2012-06-27 22:30:00</td>\n",
       "      <td>65.555556</td>\n",
       "      <td>65.888889</td>\n",
       "      <td>69.888889</td>\n",
       "      <td>57.888889</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>53.888889</td>\n",
       "      <td>60.555556</td>\n",
       "      <td>65.222222</td>\n",
       "      <td>63.222222</td>\n",
       "      <td>...</td>\n",
       "      <td>48.222222</td>\n",
       "      <td>67.111111</td>\n",
       "      <td>65.333333</td>\n",
       "      <td>60.888889</td>\n",
       "      <td>65.888889</td>\n",
       "      <td>64.777778</td>\n",
       "      <td>69.444444</td>\n",
       "      <td>66.000000</td>\n",
       "      <td>66.444444</td>\n",
       "      <td>62.333333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34255</th>\n",
       "      <td>2012-06-27 22:35:00</td>\n",
       "      <td>64.333333</td>\n",
       "      <td>65.833333</td>\n",
       "      <td>69.333333</td>\n",
       "      <td>60.166667</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>56.333333</td>\n",
       "      <td>61.000000</td>\n",
       "      <td>65.333333</td>\n",
       "      <td>61.333333</td>\n",
       "      <td>...</td>\n",
       "      <td>46.666667</td>\n",
       "      <td>68.000000</td>\n",
       "      <td>64.833333</td>\n",
       "      <td>61.833333</td>\n",
       "      <td>67.333333</td>\n",
       "      <td>66.000000</td>\n",
       "      <td>68.000000</td>\n",
       "      <td>66.833333</td>\n",
       "      <td>67.666667</td>\n",
       "      <td>63.166667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34256</th>\n",
       "      <td>2012-06-27 22:40:00</td>\n",
       "      <td>66.333333</td>\n",
       "      <td>67.111111</td>\n",
       "      <td>62.222222</td>\n",
       "      <td>50.555556</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>54.444444</td>\n",
       "      <td>55.444444</td>\n",
       "      <td>58.111111</td>\n",
       "      <td>56.111111</td>\n",
       "      <td>...</td>\n",
       "      <td>47.888889</td>\n",
       "      <td>69.111111</td>\n",
       "      <td>64.125000</td>\n",
       "      <td>57.875000</td>\n",
       "      <td>65.888889</td>\n",
       "      <td>52.111111</td>\n",
       "      <td>61.555556</td>\n",
       "      <td>67.000000</td>\n",
       "      <td>68.250000</td>\n",
       "      <td>55.666667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34257</th>\n",
       "      <td>2012-06-27 22:45:00</td>\n",
       "      <td>68.888889</td>\n",
       "      <td>64.333333</td>\n",
       "      <td>69.333333</td>\n",
       "      <td>55.888889</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>57.222222</td>\n",
       "      <td>62.777778</td>\n",
       "      <td>63.888889</td>\n",
       "      <td>64.666667</td>\n",
       "      <td>...</td>\n",
       "      <td>49.444444</td>\n",
       "      <td>68.222222</td>\n",
       "      <td>62.777778</td>\n",
       "      <td>62.555556</td>\n",
       "      <td>67.888889</td>\n",
       "      <td>65.888889</td>\n",
       "      <td>69.333333</td>\n",
       "      <td>66.000000</td>\n",
       "      <td>66.888889</td>\n",
       "      <td>62.666667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34258</th>\n",
       "      <td>2012-06-27 22:50:00</td>\n",
       "      <td>65.375000</td>\n",
       "      <td>66.875000</td>\n",
       "      <td>66.875000</td>\n",
       "      <td>58.375000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>59.875000</td>\n",
       "      <td>62.125000</td>\n",
       "      <td>65.250000</td>\n",
       "      <td>58.625000</td>\n",
       "      <td>...</td>\n",
       "      <td>50.625000</td>\n",
       "      <td>68.750000</td>\n",
       "      <td>61.875000</td>\n",
       "      <td>66.625000</td>\n",
       "      <td>64.875000</td>\n",
       "      <td>63.625000</td>\n",
       "      <td>68.750000</td>\n",
       "      <td>66.250000</td>\n",
       "      <td>67.125000</td>\n",
       "      <td>62.750000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34259</th>\n",
       "      <td>2012-06-27 22:55:00</td>\n",
       "      <td>63.500000</td>\n",
       "      <td>66.750000</td>\n",
       "      <td>68.125000</td>\n",
       "      <td>58.500000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>59.375000</td>\n",
       "      <td>63.500000</td>\n",
       "      <td>65.750000</td>\n",
       "      <td>65.750000</td>\n",
       "      <td>...</td>\n",
       "      <td>49.750000</td>\n",
       "      <td>67.500000</td>\n",
       "      <td>64.875000</td>\n",
       "      <td>58.000000</td>\n",
       "      <td>69.500000</td>\n",
       "      <td>62.000000</td>\n",
       "      <td>69.000000</td>\n",
       "      <td>66.750000</td>\n",
       "      <td>66.500000</td>\n",
       "      <td>63.375000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34260</th>\n",
       "      <td>2012-06-27 23:00:00</td>\n",
       "      <td>66.375000</td>\n",
       "      <td>64.750000</td>\n",
       "      <td>69.000000</td>\n",
       "      <td>57.875000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>60.500000</td>\n",
       "      <td>64.875000</td>\n",
       "      <td>67.250000</td>\n",
       "      <td>58.750000</td>\n",
       "      <td>...</td>\n",
       "      <td>52.125000</td>\n",
       "      <td>69.000000</td>\n",
       "      <td>64.500000</td>\n",
       "      <td>60.000000</td>\n",
       "      <td>67.250000</td>\n",
       "      <td>63.125000</td>\n",
       "      <td>67.625000</td>\n",
       "      <td>65.625000</td>\n",
       "      <td>66.875000</td>\n",
       "      <td>61.375000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34261</th>\n",
       "      <td>2012-06-27 23:05:00</td>\n",
       "      <td>65.555556</td>\n",
       "      <td>65.111111</td>\n",
       "      <td>67.888889</td>\n",
       "      <td>59.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>54.000000</td>\n",
       "      <td>64.666667</td>\n",
       "      <td>63.333333</td>\n",
       "      <td>67.222222</td>\n",
       "      <td>...</td>\n",
       "      <td>46.666667</td>\n",
       "      <td>69.222222</td>\n",
       "      <td>64.000000</td>\n",
       "      <td>61.666667</td>\n",
       "      <td>66.000000</td>\n",
       "      <td>65.000000</td>\n",
       "      <td>66.222222</td>\n",
       "      <td>58.000000</td>\n",
       "      <td>67.000000</td>\n",
       "      <td>63.333333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34262</th>\n",
       "      <td>2012-06-27 23:10:00</td>\n",
       "      <td>66.375000</td>\n",
       "      <td>66.875000</td>\n",
       "      <td>65.250000</td>\n",
       "      <td>60.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>53.750000</td>\n",
       "      <td>65.500000</td>\n",
       "      <td>64.375000</td>\n",
       "      <td>63.375000</td>\n",
       "      <td>...</td>\n",
       "      <td>49.000000</td>\n",
       "      <td>68.375000</td>\n",
       "      <td>62.375000</td>\n",
       "      <td>62.750000</td>\n",
       "      <td>67.250000</td>\n",
       "      <td>60.750000</td>\n",
       "      <td>68.250000</td>\n",
       "      <td>64.125000</td>\n",
       "      <td>68.500000</td>\n",
       "      <td>61.750000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34263</th>\n",
       "      <td>2012-06-27 23:15:00</td>\n",
       "      <td>67.428571</td>\n",
       "      <td>67.142857</td>\n",
       "      <td>67.428571</td>\n",
       "      <td>60.285714</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>54.857143</td>\n",
       "      <td>64.142857</td>\n",
       "      <td>66.857143</td>\n",
       "      <td>65.285714</td>\n",
       "      <td>...</td>\n",
       "      <td>53.714286</td>\n",
       "      <td>66.142857</td>\n",
       "      <td>63.714286</td>\n",
       "      <td>60.000000</td>\n",
       "      <td>68.714286</td>\n",
       "      <td>62.142857</td>\n",
       "      <td>69.285714</td>\n",
       "      <td>66.714286</td>\n",
       "      <td>67.857143</td>\n",
       "      <td>60.857143</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34264</th>\n",
       "      <td>2012-06-27 23:20:00</td>\n",
       "      <td>63.111111</td>\n",
       "      <td>67.000000</td>\n",
       "      <td>65.111111</td>\n",
       "      <td>57.777778</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>54.000000</td>\n",
       "      <td>62.222222</td>\n",
       "      <td>65.777778</td>\n",
       "      <td>64.111111</td>\n",
       "      <td>...</td>\n",
       "      <td>50.111111</td>\n",
       "      <td>67.777778</td>\n",
       "      <td>65.333333</td>\n",
       "      <td>60.750000</td>\n",
       "      <td>67.444444</td>\n",
       "      <td>61.000000</td>\n",
       "      <td>65.222222</td>\n",
       "      <td>64.777778</td>\n",
       "      <td>66.777778</td>\n",
       "      <td>60.777778</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34265</th>\n",
       "      <td>2012-06-27 23:25:00</td>\n",
       "      <td>67.625000</td>\n",
       "      <td>65.750000</td>\n",
       "      <td>68.000000</td>\n",
       "      <td>61.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>49.500000</td>\n",
       "      <td>63.750000</td>\n",
       "      <td>66.875000</td>\n",
       "      <td>68.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>54.000000</td>\n",
       "      <td>60.625000</td>\n",
       "      <td>64.875000</td>\n",
       "      <td>61.125000</td>\n",
       "      <td>65.500000</td>\n",
       "      <td>63.250000</td>\n",
       "      <td>66.875000</td>\n",
       "      <td>66.500000</td>\n",
       "      <td>69.125000</td>\n",
       "      <td>54.375000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34266</th>\n",
       "      <td>2012-06-27 23:30:00</td>\n",
       "      <td>62.875000</td>\n",
       "      <td>65.875000</td>\n",
       "      <td>68.250000</td>\n",
       "      <td>62.750000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>57.500000</td>\n",
       "      <td>63.625000</td>\n",
       "      <td>62.500000</td>\n",
       "      <td>57.875000</td>\n",
       "      <td>...</td>\n",
       "      <td>52.250000</td>\n",
       "      <td>69.375000</td>\n",
       "      <td>64.500000</td>\n",
       "      <td>62.250000</td>\n",
       "      <td>64.750000</td>\n",
       "      <td>62.375000</td>\n",
       "      <td>69.000000</td>\n",
       "      <td>64.375000</td>\n",
       "      <td>67.750000</td>\n",
       "      <td>60.375000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34267</th>\n",
       "      <td>2012-06-27 23:35:00</td>\n",
       "      <td>65.000000</td>\n",
       "      <td>65.888889</td>\n",
       "      <td>68.555556</td>\n",
       "      <td>61.666667</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>54.555556</td>\n",
       "      <td>62.444444</td>\n",
       "      <td>63.333333</td>\n",
       "      <td>59.222222</td>\n",
       "      <td>...</td>\n",
       "      <td>52.888889</td>\n",
       "      <td>69.000000</td>\n",
       "      <td>65.111111</td>\n",
       "      <td>55.666667</td>\n",
       "      <td>66.333333</td>\n",
       "      <td>62.444444</td>\n",
       "      <td>66.777778</td>\n",
       "      <td>64.888889</td>\n",
       "      <td>69.666667</td>\n",
       "      <td>62.333333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34268</th>\n",
       "      <td>2012-06-27 23:40:00</td>\n",
       "      <td>61.375000</td>\n",
       "      <td>65.625000</td>\n",
       "      <td>66.500000</td>\n",
       "      <td>62.750000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>50.500000</td>\n",
       "      <td>62.000000</td>\n",
       "      <td>67.000000</td>\n",
       "      <td>65.250000</td>\n",
       "      <td>...</td>\n",
       "      <td>54.000000</td>\n",
       "      <td>69.250000</td>\n",
       "      <td>60.125000</td>\n",
       "      <td>60.500000</td>\n",
       "      <td>67.250000</td>\n",
       "      <td>59.375000</td>\n",
       "      <td>66.000000</td>\n",
       "      <td>61.250000</td>\n",
       "      <td>69.000000</td>\n",
       "      <td>62.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34269</th>\n",
       "      <td>2012-06-27 23:45:00</td>\n",
       "      <td>67.000000</td>\n",
       "      <td>59.666667</td>\n",
       "      <td>69.555556</td>\n",
       "      <td>61.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>44.777778</td>\n",
       "      <td>64.222222</td>\n",
       "      <td>63.777778</td>\n",
       "      <td>59.777778</td>\n",
       "      <td>...</td>\n",
       "      <td>51.333333</td>\n",
       "      <td>67.888889</td>\n",
       "      <td>64.333333</td>\n",
       "      <td>57.000000</td>\n",
       "      <td>66.000000</td>\n",
       "      <td>62.666667</td>\n",
       "      <td>68.666667</td>\n",
       "      <td>63.333333</td>\n",
       "      <td>67.444444</td>\n",
       "      <td>61.222222</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34270</th>\n",
       "      <td>2012-06-27 23:50:00</td>\n",
       "      <td>66.750000</td>\n",
       "      <td>62.250000</td>\n",
       "      <td>66.000000</td>\n",
       "      <td>59.625000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>53.000000</td>\n",
       "      <td>64.285714</td>\n",
       "      <td>64.125000</td>\n",
       "      <td>60.875000</td>\n",
       "      <td>...</td>\n",
       "      <td>51.125000</td>\n",
       "      <td>69.375000</td>\n",
       "      <td>61.625000</td>\n",
       "      <td>60.500000</td>\n",
       "      <td>65.625000</td>\n",
       "      <td>66.375000</td>\n",
       "      <td>69.500000</td>\n",
       "      <td>63.000000</td>\n",
       "      <td>67.875000</td>\n",
       "      <td>63.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34271</th>\n",
       "      <td>2012-06-27 23:55:00</td>\n",
       "      <td>65.111111</td>\n",
       "      <td>66.888889</td>\n",
       "      <td>66.777778</td>\n",
       "      <td>61.222222</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>49.555556</td>\n",
       "      <td>65.777778</td>\n",
       "      <td>65.111111</td>\n",
       "      <td>63.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>56.000000</td>\n",
       "      <td>67.444444</td>\n",
       "      <td>64.888889</td>\n",
       "      <td>60.888889</td>\n",
       "      <td>64.222222</td>\n",
       "      <td>66.444444</td>\n",
       "      <td>68.444444</td>\n",
       "      <td>63.555556</td>\n",
       "      <td>68.666667</td>\n",
       "      <td>61.777778</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>34272 rows × 208 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                      time     773869     767541     767542     717447  \\\n",
       "0      2012-03-01 00:00:00  64.375000  67.625000  67.125000  61.500000   \n",
       "1      2012-03-01 00:05:00  62.666667  68.555556  65.444444  62.444444   \n",
       "2      2012-03-01 00:10:00  64.000000  63.750000  60.000000  59.000000   \n",
       "3      2012-03-01 00:15:00   0.000000   0.000000   0.000000   0.000000   \n",
       "4      2012-03-01 00:20:00   0.000000   0.000000   0.000000   0.000000   \n",
       "5      2012-03-01 00:25:00  57.333333  69.000000  67.666667  61.666667   \n",
       "6      2012-03-01 00:30:00  66.500000  63.875000  67.875000  62.375000   \n",
       "7      2012-03-01 00:35:00  63.625000  67.250000  63.250000  60.500000   \n",
       "8      2012-03-01 00:40:00  68.750000  65.250000  63.500000  63.000000   \n",
       "9      2012-03-01 00:45:00  63.500000  61.500000  62.500000  58.125000   \n",
       "10     2012-03-01 00:50:00  65.222222  63.666667  65.111111  61.111111   \n",
       "11     2012-03-01 00:55:00  62.250000  67.750000  66.875000  60.000000   \n",
       "12     2012-03-01 01:00:00  61.125000  67.000000  58.500000  62.250000   \n",
       "13     2012-03-01 01:05:00  58.555556  62.666667  65.777778  59.777778   \n",
       "14     2012-03-01 01:10:00  63.625000  67.000000  55.000000  59.125000   \n",
       "15     2012-03-01 01:15:00  66.777778  65.555556  68.111111  59.888889   \n",
       "16     2012-03-01 01:20:00  55.875000  65.500000  60.750000  57.250000   \n",
       "17     2012-03-01 01:25:00  64.333333  66.000000  68.222222  64.777778   \n",
       "18     2012-03-01 01:30:00  63.888889  61.555556  68.111111  57.666667   \n",
       "19     2012-03-01 01:35:00  63.125000  63.875000  65.375000  60.250000   \n",
       "20     2012-03-01 01:40:00  62.125000  61.250000  60.750000  61.375000   \n",
       "21     2012-03-01 01:45:00  61.500000  62.000000  62.125000  59.375000   \n",
       "22     2012-03-01 01:50:00  63.222222  64.111111  64.333333  59.888889   \n",
       "23     2012-03-01 01:55:00  65.000000  63.000000  69.000000  58.875000   \n",
       "24     2012-03-01 02:00:00  53.555556  65.777778  64.333333  60.444444   \n",
       "25     2012-03-01 02:05:00  62.125000  67.750000  63.125000  59.875000   \n",
       "26     2012-03-01 02:10:00  61.555556  65.222222  66.111111  58.777778   \n",
       "27     2012-03-01 02:15:00  59.875000  64.125000  67.250000  63.375000   \n",
       "28     2012-03-01 02:20:00  68.000000  65.888889  64.000000  56.333333   \n",
       "29     2012-03-01 02:25:00  65.375000  63.875000  64.500000  58.125000   \n",
       "...                    ...        ...        ...        ...        ...   \n",
       "34242  2012-06-27 21:30:00  66.875000  64.375000  68.375000  49.875000   \n",
       "34243  2012-06-27 21:35:00  66.250000  65.000000  68.333333  57.000000   \n",
       "34244  2012-06-27 21:40:00  69.000000  65.625000  69.625000  56.625000   \n",
       "34245  2012-06-27 21:45:00  66.125000  65.250000  69.500000  56.250000   \n",
       "34246  2012-06-27 21:50:00  66.555556  66.333333  69.333333  56.333333   \n",
       "34247  2012-06-27 21:55:00  66.777778  66.444444  69.666667  57.000000   \n",
       "34248  2012-06-27 22:00:00  66.666667  66.222222  68.888889  57.111111   \n",
       "34249  2012-06-27 22:05:00  69.000000  64.625000  68.750000  53.875000   \n",
       "34250  2012-06-27 22:10:00  68.250000  64.250000  67.750000  53.875000   \n",
       "34251  2012-06-27 22:15:00  66.555556  64.888889  68.222222  56.888889   \n",
       "34252  2012-06-27 22:20:00  68.875000  65.750000  69.375000  56.625000   \n",
       "34253  2012-06-27 22:25:00  67.750000  57.750000  59.125000  52.500000   \n",
       "34254  2012-06-27 22:30:00  65.555556  65.888889  69.888889  57.888889   \n",
       "34255  2012-06-27 22:35:00  64.333333  65.833333  69.333333  60.166667   \n",
       "34256  2012-06-27 22:40:00  66.333333  67.111111  62.222222  50.555556   \n",
       "34257  2012-06-27 22:45:00  68.888889  64.333333  69.333333  55.888889   \n",
       "34258  2012-06-27 22:50:00  65.375000  66.875000  66.875000  58.375000   \n",
       "34259  2012-06-27 22:55:00  63.500000  66.750000  68.125000  58.500000   \n",
       "34260  2012-06-27 23:00:00  66.375000  64.750000  69.000000  57.875000   \n",
       "34261  2012-06-27 23:05:00  65.555556  65.111111  67.888889  59.000000   \n",
       "34262  2012-06-27 23:10:00  66.375000  66.875000  65.250000  60.000000   \n",
       "34263  2012-06-27 23:15:00  67.428571  67.142857  67.428571  60.285714   \n",
       "34264  2012-06-27 23:20:00  63.111111  67.000000  65.111111  57.777778   \n",
       "34265  2012-06-27 23:25:00  67.625000  65.750000  68.000000  61.000000   \n",
       "34266  2012-06-27 23:30:00  62.875000  65.875000  68.250000  62.750000   \n",
       "34267  2012-06-27 23:35:00  65.000000  65.888889  68.555556  61.666667   \n",
       "34268  2012-06-27 23:40:00  61.375000  65.625000  66.500000  62.750000   \n",
       "34269  2012-06-27 23:45:00  67.000000  59.666667  69.555556  61.000000   \n",
       "34270  2012-06-27 23:50:00  66.750000  62.250000  66.000000  59.625000   \n",
       "34271  2012-06-27 23:55:00  65.111111  66.888889  66.777778  61.222222   \n",
       "\n",
       "          717446     717445     773062     767620     737529  ...     772167  \\\n",
       "0      66.875000  68.750000  65.125000  67.125000  59.625000  ...  45.625000   \n",
       "1      64.444444  68.111111  65.000000  65.000000  57.444444  ...  50.666667   \n",
       "2      66.500000  66.250000  64.500000  64.250000  63.875000  ...  44.125000   \n",
       "3       0.000000   0.000000   0.000000   0.000000   0.000000  ...   0.000000   \n",
       "4       0.000000   0.000000   0.000000   0.000000   0.000000  ...   0.000000   \n",
       "5      67.333333  69.000000  60.666667  67.333333  63.000000  ...  42.000000   \n",
       "6      64.375000  67.750000  65.125000  64.875000  56.250000  ...  41.250000   \n",
       "7      57.375000  65.500000  64.625000  65.500000  60.375000  ...  52.000000   \n",
       "8      65.125000  68.000000  65.125000  63.750000  62.625000  ...  52.500000   \n",
       "9      66.625000  64.250000  64.875000  66.500000  53.250000  ...  41.375000   \n",
       "10     66.555556  67.111111  65.000000  60.888889  47.000000  ...  45.000000   \n",
       "11     64.750000  66.285714  61.250000  63.250000  52.625000  ...  44.625000   \n",
       "12     66.375000  67.500000  63.125000  68.375000  56.000000  ...  42.375000   \n",
       "13     66.888889  64.333333  66.111111  65.666667  59.222222  ...  42.000000   \n",
       "14     67.625000  67.000000  65.125000  62.375000  59.875000  ...  44.375000   \n",
       "15     61.333333  68.333333  59.666667  66.888889  57.000000  ...  43.777778   \n",
       "16     67.875000  65.000000  64.875000  66.500000  60.000000  ...  40.375000   \n",
       "17     68.333333  65.111111  66.555556  66.444444  48.777778  ...  49.888889   \n",
       "18     65.000000  65.111111  65.222222  63.888889  53.444444  ...  41.000000   \n",
       "19     62.500000  67.125000  63.875000  62.625000  60.500000  ...  39.500000   \n",
       "20     59.125000  65.125000  65.250000  66.375000  52.500000  ...  46.750000   \n",
       "21     62.625000  67.750000  55.750000  65.500000  60.875000  ...  45.000000   \n",
       "22     67.000000  67.666667  66.222222  63.777778  52.666667  ...  43.888889   \n",
       "23     67.875000  65.750000  67.625000  62.125000  50.875000  ...  44.250000   \n",
       "24     66.666667  67.111111  65.666667  65.222222  52.111111  ...  48.777778   \n",
       "25     65.125000  66.000000  66.750000  68.125000  61.500000  ...  36.750000   \n",
       "26     64.888889  65.777778  60.500000  64.666667  60.555556  ...  38.555556   \n",
       "27     68.250000  66.875000  64.500000  62.750000  56.750000  ...  41.250000   \n",
       "28     67.000000  63.888889  67.222222  65.444444  53.777778  ...  48.888889   \n",
       "29     66.500000  63.625000  64.125000  65.875000  46.375000  ...  41.000000   \n",
       "...          ...        ...        ...        ...        ...  ...        ...   \n",
       "34242   0.000000  52.000000  58.625000  65.750000  63.500000  ...  46.125000   \n",
       "34243   0.000000  56.444444  63.000000  64.111111  63.375000  ...  43.666667   \n",
       "34244   0.000000  56.125000  58.125000  64.875000  65.250000  ...  48.625000   \n",
       "34245   0.000000  59.375000  59.000000  64.000000  62.875000  ...  47.500000   \n",
       "34246   0.000000  61.333333  61.222222  64.222222  61.222222  ...  47.777778   \n",
       "34247   0.000000  59.555556  62.888889  63.555556  62.555556  ...  46.888889   \n",
       "34248   0.000000  59.555556  58.222222  66.111111  61.777778  ...  47.111111   \n",
       "34249   0.000000  57.250000  61.375000  65.875000  62.875000  ...  48.375000   \n",
       "34250   0.000000  54.500000  58.500000  62.500000  65.375000  ...  45.250000   \n",
       "34251   0.000000  54.777778  59.555556  64.888889  59.666667  ...  45.333333   \n",
       "34252   0.000000  60.125000  60.250000  64.500000  64.125000  ...  44.750000   \n",
       "34253   0.000000  55.375000  60.750000  64.625000  63.125000  ...  45.500000   \n",
       "34254   0.000000  53.888889  60.555556  65.222222  63.222222  ...  48.222222   \n",
       "34255   0.000000  56.333333  61.000000  65.333333  61.333333  ...  46.666667   \n",
       "34256   0.000000  54.444444  55.444444  58.111111  56.111111  ...  47.888889   \n",
       "34257   0.000000  57.222222  62.777778  63.888889  64.666667  ...  49.444444   \n",
       "34258   0.000000  59.875000  62.125000  65.250000  58.625000  ...  50.625000   \n",
       "34259   0.000000  59.375000  63.500000  65.750000  65.750000  ...  49.750000   \n",
       "34260   0.000000  60.500000  64.875000  67.250000  58.750000  ...  52.125000   \n",
       "34261   0.000000  54.000000  64.666667  63.333333  67.222222  ...  46.666667   \n",
       "34262   0.000000  53.750000  65.500000  64.375000  63.375000  ...  49.000000   \n",
       "34263   0.000000  54.857143  64.142857  66.857143  65.285714  ...  53.714286   \n",
       "34264   0.000000  54.000000  62.222222  65.777778  64.111111  ...  50.111111   \n",
       "34265   0.000000  49.500000  63.750000  66.875000  68.000000  ...  54.000000   \n",
       "34266   0.000000  57.500000  63.625000  62.500000  57.875000  ...  52.250000   \n",
       "34267   0.000000  54.555556  62.444444  63.333333  59.222222  ...  52.888889   \n",
       "34268   0.000000  50.500000  62.000000  67.000000  65.250000  ...  54.000000   \n",
       "34269   0.000000  44.777778  64.222222  63.777778  59.777778  ...  51.333333   \n",
       "34270   0.000000  53.000000  64.285714  64.125000  60.875000  ...  51.125000   \n",
       "34271   0.000000  49.555556  65.777778  65.111111  63.000000  ...  56.000000   \n",
       "\n",
       "          769372     774204     769806     717590     717592     717595  \\\n",
       "0      65.500000  64.500000  66.428571  66.875000  59.375000  69.000000   \n",
       "1      69.875000  66.666667  58.555556  62.000000  61.111111  64.444444   \n",
       "2      69.000000  56.500000  59.250000  68.125000  62.500000  65.625000   \n",
       "3       0.000000   0.000000   0.000000   0.000000   0.000000   0.000000   \n",
       "4       0.000000   0.000000   0.000000   0.000000   0.000000   0.000000   \n",
       "5      70.000000  68.333333  57.333333  66.000000  54.666667  64.666667   \n",
       "6      69.375000  59.500000  44.625000  64.250000  62.625000  65.500000   \n",
       "7      65.875000  59.750000  64.125000  66.125000  62.375000  67.500000   \n",
       "8      68.375000  61.250000  64.375000  66.500000  66.250000  64.375000   \n",
       "9      69.250000  62.625000  58.875000  61.125000  64.250000  66.125000   \n",
       "10     65.500000  57.666667  57.444444  67.666667  64.777778  62.888889   \n",
       "11     68.142857  60.000000  58.750000  61.500000  62.125000  68.500000   \n",
       "12     69.000000  53.625000  55.142857  69.250000  61.750000  61.875000   \n",
       "13     66.222222  61.333333  55.333333  61.777778  64.000000  64.000000   \n",
       "14     65.875000  59.000000  53.000000  67.375000  66.250000  68.250000   \n",
       "15     61.555556  62.777778  56.500000  53.555556  62.666667  68.000000   \n",
       "16     65.428571  60.750000  61.000000  62.625000  57.875000  59.750000   \n",
       "17     66.222222  55.888889  60.111111  56.666667  61.111111  65.000000   \n",
       "18     67.666667  54.888889  53.333333  64.000000  63.555556  68.777778   \n",
       "19     63.375000  59.250000  60.500000  42.500000  64.750000  64.750000   \n",
       "20     69.625000  54.750000  48.500000  64.375000  63.750000  61.250000   \n",
       "21     67.875000  56.625000  47.875000  55.750000  58.875000  66.625000   \n",
       "22     67.555556  58.222222  53.875000  60.777778  55.222222  61.555556   \n",
       "23     66.000000  52.875000  59.375000  54.000000  59.000000  66.125000   \n",
       "24     67.444444  44.333333  61.111111  65.222222  56.666667  65.222222   \n",
       "25     61.375000  58.250000  58.500000  60.875000  61.000000  69.625000   \n",
       "26     64.000000  59.000000  53.222222  53.888889  58.333333  61.000000   \n",
       "27     67.625000  61.625000  55.625000  57.875000  66.625000  67.625000   \n",
       "28     68.555556  52.888889  44.888889  59.111111  61.222222  66.222222   \n",
       "29     62.625000  62.750000  58.625000  54.375000  64.750000  60.375000   \n",
       "...          ...        ...        ...        ...        ...        ...   \n",
       "34242  69.125000  65.625000  65.125000  68.625000  63.625000  65.375000   \n",
       "34243  68.333333  64.750000  62.666667  68.777778  63.333333  69.000000   \n",
       "34244  69.875000  62.875000  64.000000  67.750000  63.875000  67.875000   \n",
       "34245  68.625000  64.714286  63.125000  67.857143  63.375000  67.500000   \n",
       "34246  69.444444  64.444444  64.500000  67.111111  62.888889  68.333333   \n",
       "34247  67.125000  62.000000  57.333333  68.111111  62.777778  65.888889   \n",
       "34248  68.444444  63.777778  62.000000  67.555556  61.000000  67.222222   \n",
       "34249  68.125000  60.875000  61.625000  67.875000  49.125000  66.625000   \n",
       "34250  68.250000  65.250000  64.000000  63.875000  53.000000  65.625000   \n",
       "34251  68.111111  62.444444  61.222222  67.555556  49.111111  68.222222   \n",
       "34252  67.875000  63.875000  62.125000  66.625000  56.375000  68.000000   \n",
       "34253  69.375000  63.125000  64.000000  66.250000  66.000000  67.500000   \n",
       "34254  67.111111  65.333333  60.888889  65.888889  64.777778  69.444444   \n",
       "34255  68.000000  64.833333  61.833333  67.333333  66.000000  68.000000   \n",
       "34256  69.111111  64.125000  57.875000  65.888889  52.111111  61.555556   \n",
       "34257  68.222222  62.777778  62.555556  67.888889  65.888889  69.333333   \n",
       "34258  68.750000  61.875000  66.625000  64.875000  63.625000  68.750000   \n",
       "34259  67.500000  64.875000  58.000000  69.500000  62.000000  69.000000   \n",
       "34260  69.000000  64.500000  60.000000  67.250000  63.125000  67.625000   \n",
       "34261  69.222222  64.000000  61.666667  66.000000  65.000000  66.222222   \n",
       "34262  68.375000  62.375000  62.750000  67.250000  60.750000  68.250000   \n",
       "34263  66.142857  63.714286  60.000000  68.714286  62.142857  69.285714   \n",
       "34264  67.777778  65.333333  60.750000  67.444444  61.000000  65.222222   \n",
       "34265  60.625000  64.875000  61.125000  65.500000  63.250000  66.875000   \n",
       "34266  69.375000  64.500000  62.250000  64.750000  62.375000  69.000000   \n",
       "34267  69.000000  65.111111  55.666667  66.333333  62.444444  66.777778   \n",
       "34268  69.250000  60.125000  60.500000  67.250000  59.375000  66.000000   \n",
       "34269  67.888889  64.333333  57.000000  66.000000  62.666667  68.666667   \n",
       "34270  69.375000  61.625000  60.500000  65.625000  66.375000  69.500000   \n",
       "34271  67.444444  64.888889  60.888889  64.222222  66.444444  68.444444   \n",
       "\n",
       "          772168     718141     769373  \n",
       "0      59.250000  69.000000  61.875000  \n",
       "1      55.888889  68.444444  62.875000  \n",
       "2      61.375000  69.857143  62.000000  \n",
       "3       0.000000   0.000000   0.000000  \n",
       "4       0.000000   0.000000   0.000000  \n",
       "5      57.666667  69.000000  57.333333  \n",
       "6      51.000000  69.375000  61.250000  \n",
       "7      52.000000  68.625000  59.375000  \n",
       "8      48.625000  67.625000  61.750000  \n",
       "9      50.750000  66.250000  62.250000  \n",
       "10     60.555556  67.222222  60.000000  \n",
       "11     57.000000  66.500000  59.428571  \n",
       "12     53.125000  70.000000  63.500000  \n",
       "13     52.555556  66.222222  62.333333  \n",
       "14     54.250000  67.250000  58.375000  \n",
       "15     61.111111  68.222222  61.444444  \n",
       "16     51.125000  66.000000  60.285714  \n",
       "17     59.444444  69.222222  62.111111  \n",
       "18     61.666667  65.888889  54.888889  \n",
       "19     59.000000  67.000000  57.750000  \n",
       "20     64.375000  66.250000  56.000000  \n",
       "21     60.375000  70.000000  58.250000  \n",
       "22     62.222222  67.333333  63.000000  \n",
       "23     62.000000  64.125000  60.750000  \n",
       "24     65.000000  62.888889  62.111111  \n",
       "25     61.375000  68.625000  49.375000  \n",
       "26     67.222222  69.000000  60.444444  \n",
       "27     67.250000  65.750000  62.875000  \n",
       "28     65.888889  67.444444  60.777778  \n",
       "29     61.875000  68.625000  56.750000  \n",
       "...          ...        ...        ...  \n",
       "34242  66.125000  66.875000  62.375000  \n",
       "34243  63.333333  68.000000  63.222222  \n",
       "34244  65.625000  68.000000  64.125000  \n",
       "34245  64.125000  68.000000  63.250000  \n",
       "34246  65.333333  65.555556  63.111111  \n",
       "34247  65.333333  67.111111  64.250000  \n",
       "34248  66.444444  65.222222  62.333333  \n",
       "34249  65.250000  67.750000  60.875000  \n",
       "34250  66.000000  65.375000  63.625000  \n",
       "34251  66.000000  67.111111  62.000000  \n",
       "34252  65.625000  67.125000  63.875000  \n",
       "34253  64.625000  65.125000  63.500000  \n",
       "34254  66.000000  66.444444  62.333333  \n",
       "34255  66.833333  67.666667  63.166667  \n",
       "34256  67.000000  68.250000  55.666667  \n",
       "34257  66.000000  66.888889  62.666667  \n",
       "34258  66.250000  67.125000  62.750000  \n",
       "34259  66.750000  66.500000  63.375000  \n",
       "34260  65.625000  66.875000  61.375000  \n",
       "34261  58.000000  67.000000  63.333333  \n",
       "34262  64.125000  68.500000  61.750000  \n",
       "34263  66.714286  67.857143  60.857143  \n",
       "34264  64.777778  66.777778  60.777778  \n",
       "34265  66.500000  69.125000  54.375000  \n",
       "34266  64.375000  67.750000  60.375000  \n",
       "34267  64.888889  69.666667  62.333333  \n",
       "34268  61.250000  69.000000  62.000000  \n",
       "34269  63.333333  67.444444  61.222222  \n",
       "34270  63.000000  67.875000  63.500000  \n",
       "34271  63.555556  68.666667  61.777778  \n",
       "\n",
       "[34272 rows x 208 columns]"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "pd.read_csv(\"data/METR-LA/metr_la.csv\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "生成训练集的示例代码："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "scrolled": true,
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[INFO] Generating training data ...\n",
      "[INFO] Using parameters:step_rows=12,period_len=3,period_units=D\n",
      "[INFO] Reading Input DataFrame ...\n",
      "[INOF] Using column 0 for time index...\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "  2%|▏         | 585/33396 [00:00<00:05, 5847.77it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DatetimeIndex(['2012-03-01 00:00:00', '2012-03-01 00:05:00',\n",
      "               '2012-03-01 00:10:00', '2012-03-01 00:15:00',\n",
      "               '2012-03-01 00:20:00', '2012-03-01 00:25:00',\n",
      "               '2012-03-01 00:30:00', '2012-03-01 00:35:00',\n",
      "               '2012-03-01 00:40:00', '2012-03-01 00:45:00',\n",
      "               ...\n",
      "               '2012-06-27 23:10:00', '2012-06-27 23:15:00',\n",
      "               '2012-06-27 23:20:00', '2012-06-27 23:25:00',\n",
      "               '2012-06-27 23:30:00', '2012-06-27 23:35:00',\n",
      "               '2012-06-27 23:40:00', '2012-06-27 23:45:00',\n",
      "               '2012-06-27 23:50:00', '2012-06-27 23:55:00'],\n",
      "              dtype='datetime64[ns]', name='time', length=34272, freq=None)\n",
      "datetime64[D]\n",
      "period_len=3, period_rows=288\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 33396/33396 [00:06<00:00, 5391.75it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x shape: (33396, 48, 207, 2) , y shape: (33396, 12, 207, 2)\n",
      "train x:  (23377, 48, 207, 2) y: (23377, 12, 207, 2)\n",
      "val x:  (3340, 48, 207, 2) y: (3340, 12, 207, 2)\n",
      "test x:  (6679, 48, 207, 2) y: (6679, 12, 207, 2)\n"
     ]
    }
   ],
   "source": [
    "from scripts.generate_training_data import  generate_train_val_test\n",
    "# 生成训练集\n",
    "generate_train_val_test(input_df = \"data/METR-LA/metr_la.csv\",                                                                                                                \n",
    "                            output_dir = \"data/METR-LA\")                                                                     "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "生成的训练集文件存放在`output_dir`指定的位置："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "scrolled": true,
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "data/METR-LA/test.npz  data/METR-LA/train.npz  data/METR-LA/val.npz\r\n"
     ]
    }
   ],
   "source": [
    "# 生成的训练集文件\n",
    "! ls  data/METR-LA/*.npz"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 模型训练\n",
    "在进行了数据准备后，模型训练所需的的训练集和邻接矩阵都生成。模型训练需要指定一部分超参数（训练前要设置的固定参数，不能通过训练学习,比如学习率`lr`和`batch_size`），训练集和邻接矩阵位置(`graph_pkl_filename`)。模型训练调用的函数为`train_model`,相应的参数介绍如下：\n",
    "\n",
    "参数 | 解释\n",
    "---|---\n",
    "config|  配置文件路径， 必选参数\n",
    "graph_pkl_filename| 邻接矩阵文件路径，默认为`None`，则直接使用`config`中的设置\n",
    "checkpoint_path| 暂存点路径，训练可基于暂存点继续训练,此时会直接使用暂存点位置的配置信息。默认为`None`，则表示从头开始训练。\n",
    "device| 设备ID号，指定训练用的GPU的设备号\n",
    "lr|学习率，默认为`None`，则直接使用`config`中的设置\n",
    "batch_size| 批大小，默认为`None`，则直接使用`config`中的设置\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "其中，配置文件信息包括各项参数设置："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "scrolled": true,
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{\n",
      "  \"name\": \"METR-LA_DCRNN\",\n",
      "  \"n_gpu\": 1,\n",
      "  \"graph_pkl_filename\": \"data/METR-LA/adj_mat.pkl\",\n",
      "  \"arch\": {\n",
      "    \"type\": \"DCRNNModel\",\n",
      "    \"args\": {\n",
      "      \"batch_size\": 64,\n",
      "      \"enc_input_dim\": 2,\n",
      "      \"dec_input_dim\": 1,\n",
      "      \"max_diffusion_step\": 2,\n",
      "      \"num_nodes\": 207,\n",
      "      \"num_rnn_layers\": 2,\n",
      "      \"rnn_units\": 64,\n",
      "      \"seq_len\": 12,\n",
      "      \"output_dim\": 1\n",
      "    }\n",
      "  },\n",
      "  \"dataloader\": {\n",
      "    \"type\": \"Data\",\n",
      "    \"args\": {\n",
      "      \"train_batch_size\": 64,\n",
      "      \"data_dir\": \"data/METR-LA/\",\n",
      "      \"shuffle\": true,\n",
      "      \"validation_split\": 0.1,\n",
      "      \"val_batch_size\": 64,\n",
      "      \"test_batch_size\": 64,\n",
      "      \"num_workers\": 1\n",
      "    }\n",
      "  },\n",
      "  \"optimizer\": {\n",
      "    \"type\": \"Adam\",\n",
      "    \"args\": {\n",
      "      \"lr\": 0.01,\n",
      "      \"weight_decay\": 0,\n",
      "      \"eps\": 0.001,\n",
      "      \"amsgrad\": true\n",
      "    }\n",
      "  },\n",
      "  \"loss\": {\n",
      "    \"type\": \"masked_mae_loss\",\n",
      "    \"args\": {\n",
      "      \"null_val\": 0.0\n",
      "    }\n",
      "  },\n",
      "  \"metrics\": {\n",
      "    \"funs\": [\n",
      "      \"masked_mae_np\",\n",
      "      \"masked_mape_np\",\n",
      "      \"masked_rmse_np\"\n",
      "    ],\n",
      "    \"null_val\": 0.0\n",
      "  },\n",
      "  \"lr_scheduler\": {\n",
      "    \"type\": \"MultiStepLR\",\n",
      "    \"args\": {\n",
      "      \"milestones\": [\n",
      "        20,\n",
      "        30,\n",
      "        40,\n",
      "        50\n",
      "      ],\n",
      "      \"gamma\": 0.1\n",
      "    }\n",
      "  },\n",
      "  \"trainer\": {\n",
      "    \"epochs\": 100,\n",
      "    \"cl_decay_steps\": 2000,\n",
      "    \"save_dir\": \"saved/\",\n",
      "    \"save_period\": 1,\n",
      "    \"verbosity\": 2,\n",
      "    \"max_grad_norm\": 5,\n",
      "    \"monitor\": \"min val_loss\",\n",
      "    \"early_stop\": 10,\n",
      "    \"tensorboard\": true\n",
      "  }\n",
      "}\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import json\n",
    "with open('configs/metr_la_config.json', 'r') as f:\n",
    "    data = f.read()\n",
    "    config_info  = json.loads(data)\n",
    "print(json.dumps( config_info, indent=2))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "模型训练的调用代码为"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "scrolled": true,
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[INFO] Loading data/METR-LA/adj_mat.pkl\n",
      "('x_train', (23377, 48, 207, 2))\n",
      "('y_train', (23377, 12, 207, 2))\n",
      "('x_val', (3340, 48, 207, 2))\n",
      "('y_val', (3340, 12, 207, 2))\n",
      "('x_test', (6679, 48, 207, 2))\n",
      "('y_test', (6679, 12, 207, 2))\n",
      "adj_arg= (207, 207)\n",
      "DCRNNModel(\n",
      "  (encoder): DCRNNEncoder(\n",
      "    (encoding_cells): ModuleList(\n",
      "      (0): DCGRUCell(\n",
      "        (dconv_gate): DiffusionGraphConv()\n",
      "        (dconv_candidate): DiffusionGraphConv()\n",
      "      )\n",
      "      (1): DCGRUCell(\n",
      "        (dconv_gate): DiffusionGraphConv()\n",
      "        (dconv_candidate): DiffusionGraphConv()\n",
      "      )\n",
      "    )\n",
      "  )\n",
      "  (decoder): DCGRUDecoder(\n",
      "    (decoding_cells): ModuleList(\n",
      "      (0): DCGRUCell(\n",
      "        (dconv_gate): DiffusionGraphConv()\n",
      "        (dconv_candidate): DiffusionGraphConv()\n",
      "      )\n",
      "      (1): DCGRUCell(\n",
      "        (dconv_gate): DiffusionGraphConv()\n",
      "        (dconv_candidate): DiffusionGraphConv()\n",
      "        (project): Linear(in_features=64, out_features=1, bias=True)\n",
      "      )\n",
      "    )\n",
      "  )\n",
      ")\n",
      "Trainable parameters: 223745\n",
      "num_nodes= 207\n",
      "Loading checkpoint: saved/models/METR-LA_DCRNN/0521_203903/model_best.pth ...\n",
      "Checkpoint loaded. Resume training from epoch 101\n",
      "output_dim= 1\n",
      "Train Epoch: 101 [0/366 (0%)] Loss: 3.059810\n",
      "Train Epoch: 101 [20/366 (5%)] Loss: 2.716581\n",
      "Train Epoch: 101 [40/366 (11%)] Loss: 2.916623\n",
      "Train Epoch: 101 [60/366 (16%)] Loss: 2.969199\n",
      "Train Epoch: 101 [80/366 (22%)] Loss: 3.056485\n",
      "Train Epoch: 101 [100/366 (27%)] Loss: 2.976253\n",
      "Train Epoch: 101 [120/366 (33%)] Loss: 2.771209\n",
      "Train Epoch: 101 [140/366 (38%)] Loss: 2.978802\n",
      "Train Epoch: 101 [160/366 (44%)] Loss: 2.948096\n",
      "Train Epoch: 101 [180/366 (49%)] Loss: 2.768075\n",
      "Train Epoch: 101 [200/366 (55%)] Loss: 3.018339\n",
      "Train Epoch: 101 [220/366 (60%)] Loss: 2.877708\n",
      "Train Epoch: 101 [240/366 (66%)] Loss: 2.887774\n",
      "Train Epoch: 101 [260/366 (71%)] Loss: 2.744478\n",
      "Train Epoch: 101 [280/366 (77%)] Loss: 2.726737\n",
      "Train Epoch: 101 [300/366 (82%)] Loss: 2.668944\n",
      "Train Epoch: 101 [320/366 (87%)] Loss: 2.942890\n",
      "Train Epoch: 101 [340/366 (93%)] Loss: 2.871285\n",
      "Train Epoch: 101 [360/366 (98%)] Loss: 2.911509\n",
      "    epoch          : 101\n",
      "    loss           : 2.879099254399701\n",
      "    masked_mae_np  : 0.3590233466827153\n",
      "    masked_mape_np : 2.780288285896426\n",
      "    masked_rmse_np : 0.8774379461677999\n",
      "    val_loss       : 2.884757233115862\n",
      "    val_masked_mae_np: 0.35760897060610214\n",
      "    val_masked_mape_np: 2.4809825487856596\n",
      "    val_masked_rmse_np: 0.7023787841481982\n",
      "    Time           : 441.0540s\n",
      "Saving checkpoint: saved/models/METR-LA_DCRNN/0526_161227/checkpoint-epoch101.pth ...\n",
      "Average training time: 4.3669s\n"
     ]
    }
   ],
   "source": [
    "from train import train_model\n",
    "train_model(config =\"configs/metr_la_config.json\",\n",
    "            device = 1,\n",
    "            checkpoint_path = \"saved/models/METR-LA_DCRNN/0521_203903/model_best.pth\"\n",
    "           )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 模型预测\n",
    "\n",
    "模型预测阶段要输入邻接矩阵文件`graph_pkl_filename`和模型训练生成的暂存点路径`checkpoint_path`，并通过`checkpoint_path`的配置文件指定测试集的位置，进行模型的预测。模型预测调用的函数为`test_model`,相应的参数介绍如下：\n",
    "\n",
    "参数 | 解释\n",
    "---|---\n",
    "checkpoint_path| 暂存点路径，训练可基于暂存点继续训练,此时会直接使用暂存点位置的配置信息，必选参数。\n",
    "graph_pkl_filename| 邻接矩阵文件路径，默认为`None`，则直接使用`checkpoint_path`位置的`config`中的设置\n",
    "device| 设备ID号，指定训练用的GPU的设备号"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "scrolled": true,
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DCRNNModel(\n",
      "  (encoder): DCRNNEncoder(\n",
      "    (encoding_cells): ModuleList(\n",
      "      (0): DCGRUCell(\n",
      "        (dconv_gate): DiffusionGraphConv()\n",
      "        (dconv_candidate): DiffusionGraphConv()\n",
      "      )\n",
      "      (1): DCGRUCell(\n",
      "        (dconv_gate): DiffusionGraphConv()\n",
      "        (dconv_candidate): DiffusionGraphConv()\n",
      "      )\n",
      "    )\n",
      "  )\n",
      "  (decoder): DCGRUDecoder(\n",
      "    (decoding_cells): ModuleList(\n",
      "      (0): DCGRUCell(\n",
      "        (dconv_gate): DiffusionGraphConv()\n",
      "        (dconv_candidate): DiffusionGraphConv()\n",
      "      )\n",
      "      (1): DCGRUCell(\n",
      "        (dconv_gate): DiffusionGraphConv()\n",
      "        (dconv_candidate): DiffusionGraphConv()\n",
      "        (project): Linear(in_features=64, out_features=1, bias=True)\n",
      "      )\n",
      "    )\n",
      "  )\n",
      ")\n",
      "Trainable parameters: 223745\n",
      "Loading checkpoint: saved/models/METR-LA_DCRNN/0521_203903/model_best.pth ...\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 105/105 [00:57<00:00,  1.84it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Inference time: 57.0744 s\n",
      "--------test results--------\n",
      "Horizon 01, MAE: 2.26, MAPE: 0.0542, RMSE: 3.92\n",
      "Horizon 02, MAE: 2.54, MAPE: 0.0637, RMSE: 4.74\n",
      "Horizon 03, MAE: 2.73, MAPE: 0.0710, RMSE: 5.30\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Horizon 04, MAE: 2.89, MAPE: 0.0773, RMSE: 5.74\n",
      "Horizon 05, MAE: 3.03, MAPE: 0.0828, RMSE: 6.11\n",
      "Horizon 06, MAE: 3.15, MAPE: 0.0877, RMSE: 6.43\n",
      "Horizon 07, MAE: 3.25, MAPE: 0.0921, RMSE: 6.70\n",
      "Horizon 08, MAE: 3.34, MAPE: 0.0960, RMSE: 6.94\n",
      "Horizon 09, MAE: 3.43, MAPE: 0.0996, RMSE: 7.15\n",
      "Horizon 10, MAE: 3.51, MAPE: 0.1030, RMSE: 7.34\n",
      "Horizon 11, MAE: 3.58, MAPE: 0.1061, RMSE: 7.52\n",
      "Horizon 12, MAE: 3.66, MAPE: 0.1090, RMSE: 7.68\n",
      "Predictions saved as saved/results/dcrnn_predictions.npz.\n"
     ]
    }
   ],
   "source": [
    "from infer  import test_model\n",
    "test_model(checkpoint_path =\"saved/models/METR-LA_DCRNN/0521_203903/model_best.pth\",\n",
    "            device = 1,\n",
    "            graph_pkl_filename = \"data/METR-LA/adj_mat.pkl\"\n",
    "           )\n",
    "# Horizon 代表预测时刻长度"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 参考文献\n",
    "1. 王劲峰, 葛咏, 李连发, 等 (2014) 地理学时空数据分析方法. 地理学报 69:1326. doi: 10.11821/dlxb201409007\n",
    "1. Zhang J, Zheng Y, Qi D, et al (2016) DNN-based Prediction Model for Spatio-temporal Data. In: Proceedings of the 24th ACM SIGSPATIAL International Conference on Advances in Geographic Information Systems, Proceeding. ACM, New York, NY, USA, pp 92:1--92:4\n",
    "1. Zhang J bo, Zheng Y, Qi D kang (2017) Deep Spatio-Temporal Residual Networks for Citywide Crowd Flows Prediction. In: Proceedings of the Thirty-First AAAI Conference on Artificial Intelligence (AAAI-17). pp 1655–1661\n",
    "1. Li Y, Yu R, Shahabi C, Liu Y (2018) Diffusion Convolutional Recurrent Neural Network: Data-Driven Traffic Forecasting. In: International Conference on Learning Representations (ICLR ’18). pp 1–16\n",
    "1. Cai H, Zheng VW, Chang KCC (2018) A Comprehensive Survey of Graph Embedding: Problems, Techniques, and Applications. IEEE Transactions on Knowledge and Data Engineering 30:1616–1637. doi: 10.1109/TKDE.2018.2807452"
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "Slideshow",
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
